/**
 * @Title:   [EnCacheConfiguration.java]
 * @Package: [com.yixun.qfbao.config]
 * @author:  [shaoping.jiao] 
 * @CreateDate: [2017年11月9日 下午6:19:27]   
 * @UpdateUser: [shaoping.jiao]   
 * @UpdateDate: [2017年11月9日 下午6:19:27]   
 * @Description:  [配置Encache]
 * @version: [V1.0]
 */
package com.yixun.qfbao.config;

import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.ehcache.EhCacheCacheManager;
import org.springframework.cache.ehcache.EhCacheManagerFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;

/**
 * @ClassName: EnCacheConfiguration
 * @author: [shaoping.jiao]
 * @CreateDate: [2017年11月9日 下午6:19:27]
 * @UpdateUser: [shaoping.jiao]
 * @UpdateDate: [2017年11月9日 下午6:19:27]
 * @Description: [配置Encache]
 * @version: [V1.0]
 */
@Configuration
@EnableCaching // 开启缓存
public class EnCacheConfiguration {
	
	/**
	 * ehcache 主要的管理器
	 * 
	 * @param bean
	 * @return
	 */
	@Bean
	public EhCacheCacheManager ehCacheCacheManager(EhCacheManagerFactoryBean bean) {
		return new EhCacheCacheManager(bean.getObject());
	}
	
	/*
	 * 据shared与否的设置, Spring分别通过CacheManager.create() 或new CacheManager()方式来创建一个ehcache基地.
	 * 也说是说通过这个来设置cache的基地是这里的Spring独用,还是跟别的(如hibernate的Ehcache共享)
	 */
	@Bean
	public EhCacheManagerFactoryBean ehCacheManagerFactoryBean() {
		EhCacheManagerFactoryBean cacheManagerFactoryBean = new EhCacheManagerFactoryBean();
		cacheManagerFactoryBean.setConfigLocation(new ClassPathResource("ehcache.xml"));
		cacheManagerFactoryBean.setShared(true);
		return cacheManagerFactoryBean;
	}
}
